
import Grafico.*;
import IA.QuickIA;
import Interfaz.Dibujador;
import Objetos.*;
import java.awt.Toolkit;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Scanner;
import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;

public class Principal {
public static Juego juego;
    public static Juego autocargar() {
         {
        String ruta;
        int returnVal;
        Juego j=null;
        JFileChooser chooser = new JFileChooser("./");
        FileNameExtensionFilter filter = new FileNameExtensionFilter("Archivos de grabado SAV","sav");
        chooser.setDialogType(JFileChooser.SAVE_DIALOG);
        chooser.setFileFilter(filter);
        returnVal=chooser.showOpenDialog(chooser);
         if(returnVal == JFileChooser.APPROVE_OPTION)
         {
             ruta=chooser.getSelectedFile().getPath();
             //if (!ruta.contains(".sav")) ruta+=".sav";
            try {
                 ObjectInputStream lector=new ObjectInputStream ( new BufferedInputStream(new FileInputStream(ruta)));
                 //JOptionPane.showMessageDialog(null,"se creo");
                 //JOptionPane.showMessageDialog(null,ruta);
                 j=(Juego)lector.readObject(); //aca se da el error
                 lector.close();
                 JOptionPane.showMessageDialog(null, "Juego cargado exitosamente");
             }
            catch (ClassNotFoundException e) {JOptionPane.showMessageDialog(null,"Error en la lectura");}
            catch (IOException e) {JOptionPane.showMessageDialog(null,"en la lectura");}

            }
         return j;
        }
    }

    public static Juego cargar_juego() throws FileNotFoundException {//inicializa los valores de los 2 jugadores de acuerdo a unarchivo guardado
//        File ini = new File("game.ini");
//        Scanner sc = new Scanner(ini);
//        int autoload = sc.nextInt();
//        if (autoload == 0) {
//            System.out.println("No autoguardado encontrado, creando nuevo juego");
//            return new Juego();
//        } else {
            return autocargar();
       // }
    }

    public static void main(String args[]) throws FileNotFoundException, IOException {
        Object[] opciones = {"Cargar Juego", "Nuevo Juego"};
        int opcion;
        juego = null;
        
        //linea para evitar flickering
        System.setProperty("sun.awt.noerasebackground", "true");
        Toolkit.getDefaultToolkit().setDynamicLayout(false);
        //

        while(juego==null)
        {
            opcion = JOptionPane.showOptionDialog(null, "Bienvenido al Juego!\n Escoja una opción", "Juego", JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE, null, opciones, null);
            if (opcion == 1) {
                String intro ="";
                juego = new Juego();
                intro = intro +"Octubre 9, 1813  los patriotas hacen un intento de la toma de la municipalidad de Cuzco,\n";
                intro = intro+ "los hermanos Angulo planean tomar la municipalidad reclutando a todo civil que esté dispuesto a sublevarse contra el régimen…";
                JOptionPane.showMessageDialog(null, intro);
                juego.jugar();
            } else if (opcion == 0) {
                juego = cargar_juego();
                if (juego!=null)
                {         
                    
                    juego.cargaTiles();  
                    juego.cargaSprites();
                    juego.recargarAldeas();
                    juego.setArm(new Armeria("armeria.txt"));
                    //System.out.println("Esta opcion aun ya se ha implementado");   
                    //juego.getGestorMapas().agrega_mapas("mapa.txt", "La Toma de Cuzco", juego.getTiles());
                    juego.getGestorMapas().getmapa("La Toma de Cuzco").cargaTilesEnMapa(juego.getTiles());
                    //este doble for vuelve a cargar los sprites en los batallones y en el mapa
                    for(int i=0;i<juego.getEjercitos().size();i++){
                        for(int j=0;j<juego.getEjercitos().get(i).getBatallones().size();j++){
                            juego.getEjercitos().get(i).getBatallones().get(j).setSprite(juego.getGestorMapas().getmapa("La Toma de Cuzco"));
                        }
                    }
                    juego.setArm(new Armeria("armeria.txt"));
                    //System.out.println("Esta opcion aun ya se ha implementado");                    

                    juego.setDib(new Dibujador(25,9,juego.getEjercitos().get(0).getBatallonActivo()));
                    juego.seteo_objetivos();
                    Ventana_principal v = new Ventana_principal();
                    juego.setV(v);
                    QuickIA ia;
                    ia = new QuickIA(juego.getGestorMapas().getmapa("La Toma de Cuzco"), juego.getEjercitos().get(1), juego.getEjercitos().get(0));
                    v.setIA(ia);
                    juego.setia(ia);                    
                    v.setObjetivos(juego.getobjetivos());
                    juego.getDib().setVentana(v);
                    v.setBatallonActivo(juego.get_batallon());
                    juego.jugar2(juego.get_batallon());
                    //v.creaComprobadores();

                    //((QuickIA)juego.getIa()).setDibuja(juego.getDib());
                    //((QuickIA)juego.getIa()).carga_patrulla();
                    
                    
                }
            } else if (opcion == JOptionPane.CLOSED_OPTION){
                System.exit(0);
            }
        }

        

    }

}
